/**通用处理下拉筛选*/
import { get } from '@/utils'
interface Params {
  /**请求地址 */
  api: string
  fieldName?: { label: string; value: string } | null
  query?: any
  /**是否直接请求 */
  isLoad?: boolean
  /**接口响应data里的字段名称，适用于分页。不传默认取data */
  dataKey?: string
}
export default (params: Params) => {
  const isLoad = ref(params.isLoad ?? true)
  const options = ref<any[]>([])
  const replaceFieldName = dataList => {
    return dataList.map(item => {
      // 判断当前项是否为对象，如果是，则进行字段替换
      if (typeof item === 'object' && item !== null) {
        // 复制对象以避免直接修改原始数据
        const newItem = { ...item }
        newItem.label = newItem[params.fieldName?.label || 'name']
        newItem.value = newItem[params.fieldName?.value || 'id']
        // 递归处理对象中的其他数组或对象
        for (const key in newItem) {
          if (Array.isArray(newItem[key]) || typeof newItem[key] === 'object') {
            newItem[key] = replaceFieldName(newItem[key])
          }
        }
        return newItem
      }

      // 如果当前项既不是数组也不是对象，则直接返回
      return item
    })
  }
  const getOptions = (cb?) => {
    get({ url: params.api, data: params.query }).then(({ data }) => {
      const list = params.dataKey ? data[params.dataKey] : data
      options.value = replaceFieldName(list)
      cb?.()
    })
  }
  if (isLoad.value) {
    getOptions()
  }
  return { options, getOptions }
}
